#import "lib/lib.typ": *
#show: chapter-style.with(title: "线性二次型调节器", info: info)

= 一维动态规划

== 简单系统

考虑系统

$ x_([k+1]) = x_([k]) + u_([k]) $

其中

- 初始值：$x[0]=1$
- 目标值：$x[d]=0$
- 末端：$N=2$

于是，其代价函数可定义为

$
  J = 1 / 2 underbrace(x^2[w], "末端代价") + 1 / 2 sum_(k=0)^(N-1)( underbrace(x^2_([k]), "运行代价") + underbrace(u^2_([k]), "输入代价") )
$

== 极端策略

#block(height: 11em, columns()[
  - 策略1：一步到位
    - 输入代价
      - $u[0] = -1$
      - $u[1] = 0$
    - 最终代价
      - $x[1] = 0, x[2] = 0$
      - $J = 1$
  - 策略2：两步走
    - 输入代价
      - $u[0] = -0.5$
      - $u[1] = -0.5$
    - 最终代价
      - $x[1] = 0.5, x[2] = 0$
      - $J = 0.875$
])

== 最优策略

即，求$u^*[0], u^*[1]$，使$J$最小，采用逆向分级方法

- $k = 1→2$

$
  J_(1→2) & = 1 / 2 x^2[2] + 1 / 2 x^2[1] + 1 / 2 u^2[1] \
          & = 1 / 2 (x[1] + u[1])^2 + 1 / 2 x^2[1] + 1 / 2 u^2[1]
$

求导得

$ pdv(J_(1→2), u[1]) = x[1] + u[1] + u[1] = 0 $

有

$ u^*[1] = -1 / 2 x[1] $

于是

$ J^*_(1→2) = 3 / 4 x^2[1] $

进而得

$ J_(0→2) = J_(1→2) + 1 / 2(x^2[0] + u^2[0]) $

根据 Bellman 最优理论，若$J_(0→2)$最小，则子项$J_(1→2)$此时必为 最小。代入$J^*_(1→2)$和$x[1]$，可得

$ J_(0→2) = 3 / 4 (x[0] + u[0])^2 + 1 / 2 (x^2[0] + u^2[0]) $

求导得

$ pdv(J_(0→2), u[0]) = 3 / 2 (x[0] + u[0]) + u[0] = 0 $

此时

$ u^*[0] = -3 / 5 x[0] $

回代得

$ x[0] = 2 / 5, x[1] = 1 / 5 $

最终得

$ J_(min) = 0.8 $

= 线性二次型调节器

== 连续线性系统

对连续线性系统

$ dot(𝒙) = 𝑨 𝒙 + 𝑩 𝒖 $

若$𝒖 = -k 𝒙$，则

$ dot(𝒙) = (𝑨 - 𝑩 k)𝒙 = 𝑨_("cl") 𝒙 $

此时，可通过调整$k$来调整$𝑨_("cl")$的特征值，从而控制系统的稳定性。

对$𝒖$考虑，则需要引入最优化控制，其损失函数为

$ J = ∫_0^∞ (𝒙^⊤ 𝑸 𝒙 + 𝒖^⊤ 𝑹 𝒖) dd(t) $

这就得到了一个 LQR（linear quadratic regulator）问题。其中

- $𝒙^⊤ 𝑸 𝒙 > 0$，类似惩罚项
- $𝒖^⊤ 𝑹 𝒖$中，$𝑹$越大，$𝒖$的影响越大

== 离散线性系统

对离散线性系统

$ 𝒙_([k+1]) = 𝑨 𝒙_([k]) + 𝑩 𝒖_([k]) $ <sys-quad>

其代价函数可化为二次型

$
  J & = 1 / 2 underbrace((𝒙_([N]) - 𝒙_d_([N]))^⊤ 𝑺(𝒙_([N]) - 𝒙[d]), "末端代价") \
    & +1 / 2sum_(k=0)^(N-1) (underbrace((𝒙_([N]) - 𝒙[d])^⊤ 𝑸 (𝒙_([N]) - 𝒙[d])^⊤, "运行代价") + 𝒖^⊤_([k]) 𝑹 𝒖_([k]))
$

调节目标

$ 𝒙_d = 𝟎 = vec(delim: "[", 0, 0, ⋮, 0) $

则

$
  J = 1 / 2 𝒙_([N])^⊤ 𝑺 𝒙_([N]) + 1 / 2 sum_k^(N-1) (𝒙_([k])^⊤ 𝑸 𝒙_([k]) + 𝒖^⊤_([k]) 𝑹 𝒖_([k]))
$

此时，$𝑺, 𝑸$为半正定对角阵，$𝑹$为正定对角阵。

== 逆向分级

$k = N$时

$ J_(N→N) = 1 / 2 𝒙_([N])^⊤ 𝑺 𝒙_([N]) $

此时$J$为最优末端代价，因为此时无法再产生变化。令$𝑺 = P_([0])$，即

$ J_(N→N) = 1 / 2 𝒙_([N])^⊤ P_([0]) 𝒙_([N]) $

$k = N-1$时

$
  J_(N-1→N) & = 1 / 2 𝒙_([N])^⊤ 𝑺 𝒙_([N]) + 1 / 2 𝒙_([N-1])^⊤ 𝑸 𝒙_([N-1]) + 1 / 2 𝒖^⊤_([N-1]) 𝑹 𝒖_([N-1]) \
            & = J_(N→N) + 1 / 2 𝒙_([N-1])^⊤ 𝑸 𝒙_([N-1]) + 1 / 2 𝒖^⊤_([N-1]) 𝑹 𝒖_([N-1])
$

以此类推

$
  J_(N-2→N) = J_(N-1→N) + 1 / 2 𝒙_([N-2])^⊤ 𝑸 𝒙_([N-2]) + 1 / 2 𝒖^⊤_([N-2]) 𝑹 𝒖_([N-2])
$

又由@sys-quad，可得

$ 𝒙_([N]) = 𝑨 𝒙_([N-1]) + 𝑩 𝒖_([N-1]) $

于是，令一阶导数

$ pdv(J_(N-1→N), 𝒖_([N-1])) = 0 $

得

$
  𝒖^*_([N-1]) = -(𝑩^⊤ P_([0])𝑩 + 𝑹)^(-1) 𝑩^⊤ P_([0]) 𝑨 𝒙_([ N-1 ]) = -underbrace(F_([N-1]), "feedback")underbrace(𝒙_([N-1]), "Gain")
$

又二阶导数

$
  pdv(J_(N-1→N), 𝒖_([N-1]), 2) = underbrace((𝑩^⊤ P_([0])𝑩)^⊤, "≥0") + underbrace(𝑹^⊤, ">0")
$

故$𝒖^*$为最小值。进一步得

$ J_(N-1→N) = 1 / 2 𝒙_([N-1])^⊤ P_([1]) 𝒙_([N-1]) $

其中

$
  P_([1]) = (𝑨 - 𝑩 F_([N-1]))^⊤ P_([0])(𝑨 - 𝑩 F_([N-1])) + F_([N-1])^⊤ 𝑹 F_([N-1]) + 𝑸
$

类推得

$ J_(N-k→N) = 1 / 2 𝒙_([N-1])^⊤ P_([k]) 𝒙_([N-1]) $

其中

$
  cases(
    P_([k]) = (𝑨 - 𝑩 F_([N-k]))^⊤ P_([k-1])(𝑨 - 𝑩 F_([N-k])) + F_([N-k])^⊤ 𝑹 F_([N-k]) + 𝑸,
    F_([N-k]) = (𝑩^⊤ P_([0])𝑩 + 𝑹)^(-1) 𝑩^⊤ P_([k-1]) 𝑨,
    𝒖^*_([N-k]) = -F_([N-k]) 𝒙_([N-k])
  )
$
